package net.towee.client.gadgets;

import java.util.List;

import net.towee.model.account.Board;
import net.towee.model.account.Gadget;
import net.towee.model.repo.DocumentType;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Image;

/**
 * This interface define structure of objects that tell for us
 * about some gadget. Also implementation must can return
 * the GadgetContainer with given gadget(Inject it by GIN
 * and return as GadgetContainer)
 * 
 * @author c58
 */
public interface GadgetInfo {
	/**
	 * @return name of gadget for printing
	 */
	String getName();
	
	/**
	 * @return canonical name of gadget
	 */
	String getCanonicalName();
	
	/**
	 * Return description about given gadget
	 * @return
	 */
	String getDescription();
	
	/**
	 * @return List of screenshots with this gadget
	 */
	List<Image> getSceenshots();
	
	/**
	 * List of types what this gadget operate for.
	 * @return
	 */
	List<DocumentType> getTypes();
	
	/** 
	 * Return GadgetContainer for attaching to some board
	 * It applies given gadget options to container.
	 * @param callback TODO
	 * @return
	 */
	void getGadgetContainer(Gadget g, Board b, AsyncCallback<GadgetPresenter> callback);
}
